/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Gestionequipo;
 
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import gestionJDBC.*;
import gestionJugadores.*;
import gestionpistas.*;
import GestionEntrenadores.*;


/**
 *
 * @author Adrian
 */
public class EquipoFundacionDB {
    
        private static gestorJDBC gestor = gestorJDBC.getInstance();
                

        public ArrayList <EquipoFundacion> getEquipoFundacion(String nombre){
            
             ArrayList<EquipoFundacion> eqi = new ArrayList<EquipoFundacion>();   
                        
            ResultSet rs = null;
            ResultSet rs2 = null;

            rs = gestor.Consultar("SELECT equipo_fundacion.id_equipo,equipo.nombre,equipo_fundacion.entrenamiento,equipo_fundacion.alta "
                                    + "FROM  equipo_fundacion,equipo where  "
                                    + "equipo.id_equipo=equipo_fundacion.id_equipo and equipo.nombre ='"+ nombre+"'");
            
            int i = 0;
     
            try{
                
                while(rs.next()){
                    
                    eqi.add(new EquipoFundacion());
                    eqi.get(i).SetId((Integer)rs.getObject("id_equipo"));
                    eqi.get(i).SetNombre(rs.getObject("nombre").toString());
                    eqi.get(i).SetEntrenamiento(rs.getObject("entrenamiento").toString());
                    eqi.get(i).SetAlta((Integer)rs.getObject("alta"));
                    
                    rs2=gestor.Consultar("Select *  from jugador,inscrito where jugador.id_jugador=inscrito.id_jugador and "
                                          +"inscrito.id_equipo="+eqi.get(i).GetId());
                    
                    int contador=0;
                    
                    while(rs2.next()){
                        contador++;
                    }

                 if(contador >0){
                   rs2 = gestor.Consultar("SELECT * from jugador,inscrito where  jugador.id_jugador = inscrito.id_jugador and"
                                            + " inscrito.id_equipo ="+ eqi.get(i).GetId());
                    
                    try{
                        
                      
                        while(rs2.next()){
                            
                            Jugador j = new Jugador();
                            j.setId_jugador((Integer) rs2.getObject("id_jugador"));
                            j.setNombre(rs2.getObject("nombre").toString());
                            j.setApellido1(rs2.getObject("apellido1").toString());
                            j.setApellido2(rs2.getObject("apellido2").toString());
                            j.setFecha_nacimiento(rs2.getObject("fecha_nacimiento").toString());
                            j.setAltura((Integer) rs2.getObject("altura"));
                            j.setDomicilio(rs2.getObject("domicilio").toString());
                            j.setLocalidad(rs2.getObject("localidad").toString());
                            j.setCodigo_postal((Integer) rs2.getObject("codigo_postal"));
                            j.setProvincia(rs2.getObject("provincia").toString());
                            j.setTalla(rs2.getObject("talla").toString());
                            j.setAlta(rs2.getObject("alta").toString());
                            j.setColegio(rs2.getObject("colegio").toString());
                            j.setEquipo_ant(rs2.getObject("equipo_ant").toString());
                            j.setRopa(rs2.getObject("ropa").toString());
                            
                            eqi.get(i).SetJugador(j);
                            
                        }
                    
                    }catch(SQLException e ){
                        
                                JOptionPane.showMessageDialog(null,"Error al obtener los jugadores de un equipo\n"
                                + e.getMessage());
                    }
                }

                    i++;
                
                }
                

            }catch(SQLException e ){
                JOptionPane.showMessageDialog(null,"Error al obtener los equipos\n"
                                + e.getMessage());
            }
                        
            return eqi;
        }
      
        
        
        public boolean AsociarJugadorEquipoFundacion( Jugador j, EquipoFundacion f){
            
            boolean confirmacion;
        
            
            confirmacion = gestor.Insertar("INSERT INTO inscrito (id_jugador,id_equipo) "
                                            + "VALUES ("+ j.getId_jugador() + ", " 
                                            + f.GetId()+")");
                        
            return confirmacion;
            
                        
            
        }

        public boolean CrearEquipoFundacion(EquipoFundacion eq, Pista p){
            
            boolean confirmacion;
            
            int cant;
            cant = 0;
            
            ResultSet rs = gestor.Consultar("Select count(*) as contador from equipo");
            
            try {

                while(rs.next()){
                    cant=((Number)rs.getObject("contador")).intValue();
                }

            } catch (SQLException e) {
                
                JOptionPane.showMessageDialog(null, "Fallo al intentar conseguir numero de tuplas\n"+e.getMessage());
            }
            

            if(cant>0){
                
                ResultSet rs3=gestor.Consultar("SELECT max(id_equipo) AS max_id FROM equipo");
                
                try {
                    rs3.next();
                    cant=(Integer)rs.getObject("max_id");
                } catch (SQLException e) {
                    //JOptionPane.showMessageDialog(null, "Numero de equipos es 0\n"+e.getMessage());
                }	
                cant++;

                
                confirmacion = gestor.Insertar("INSERT INTO equipo_fundacion (id_equipo,entrenamiento,alta) "
                                                + "VALUES (" + cant  + ",'" + eq.GetEntrenamiento()
                                                + "',1)");
                
            } else {
                
                cant=1;
                
                confirmacion = gestor.Insertar("INSERT INTO equipo_fundacion (id_equipo,entrenamiento,alta) "
                                                + "VALUES (" + cant  + ",'" + eq.GetEntrenamiento()
                                                + "',1)");
            
            }
            
            if(confirmacion){
                
            
                confirmacion = gestor.Insertar("INSERT INTO equipo(id_equipo,nombre,alta) "
                                                + "VALUES (" + cant  + ",'" + eq.GetNombre() + "',1)");
                
            }
            
            if(confirmacion){
                
                confirmacion = gestor.Insertar("INSERT INTO usa (id_equipo,id_pista) "
                                                + "VALUES (" + cant  + "," + p.getid_pistas() + ")");
                
            }
             
            return confirmacion;
            
            
        }

        public boolean DarBajaEquipoFundacion(Integer id){
            
            
            boolean confirmacion;

            confirmacion = gestor.Modificar("UPDATE equipo_fundacion SET alta=0 WHERE id_equipo="+id);

            return confirmacion;
        
        }

        public boolean setEquipoFundacion(EquipoFundacion e, Pista p){
            
            
            boolean confirmacion;

            confirmacion = gestor.Modificar("UPDATE equipo_fundacion SET entrenamiento=" + e.GetEntrenamiento() 
                                            + ", nombre='"+ e.GetNombre() + "' WHERE id_equipo="+ e.GetId());
            
            
            if(confirmacion){
                
                confirmacion = gestor.Modificar("UPDATE usa SET id_pista=" + p.getid_pistas() 
                                                + " WHERE id_equipo="+ e.GetId());
            }

            return confirmacion;
            
        }

        public ArrayList <EquipoFundacion>getEquiposLibres(String nombre){
            
            ArrayList<EquipoFundacion> eqi = new ArrayList<EquipoFundacion>();   
            
            //Agrupado(id_equipo, id_grupo, valido): así sabremos que equipos se pueden enfrentar entre ellos y organizar así las clasificaciones.
            
            ResultSet rs = null;
            ResultSet rs2 = null;

            rs= gestor.Consultar("SELECT equipo.id_equipo,equipo.nombre,equipo_fundacion.alta,"
                                + " equipo_fundacion.entrenamiento from"
                                + " equipo,equipo_fundacion where equipo.id_equipo not in (Select agrupado.id_equipo from agrupado)"
                                + " and equipo.alta=1 and equipo_fundacion.alta=1 and equipo.id_equipo=equipo_fundacion.id_equipo");

            
            int i = 0;
            
            
            
            try{
                
                while(rs.next()){
                    
                    eqi.add(new EquipoFundacion());
                    eqi.get(i).SetId((Integer)rs.getObject("id_equipo"));
                    eqi.get(i).SetNombre(rs.getObject("nombre").toString());
                    eqi.get(i).SetEntrenamiento(rs.getObject("entrenamiento").toString());
                    eqi.get(i).SetId((Integer)rs.getObject("alta"));
                    
                    rs2 = gestor.Consultar("SELECT * from jugador,inscrito where jugador.id_jugador = inscrito.id_jugador and"
                                            + " inscrito.id_equipo="+ eqi.get(i).GetId());
                    
                    try{
                        
                      
                        while(rs2.next()){
                            
                            Jugador j = new Jugador();
                            j.setId_jugador((Integer) rs2.getObject("id_jugador"));
                            j.setNombre(rs2.getObject("nombre").toString());
                            j.setApellido1(rs2.getObject("apellido1").toString());
                            j.setApellido2(rs2.getObject("apellido2").toString());
                            j.setFecha_nacimiento(rs2.getObject("fecha_nacimiento").toString());
                            j.setAltura((Integer) rs2.getObject("altura"));
                            j.setDomicilio(rs2.getObject("domicilio").toString());
                            j.setLocalidad(rs2.getObject("localidad").toString());
                            j.setCodigo_postal((Integer) rs2.getObject("codigo_postal"));
                            j.setProvincia(rs2.getObject("provincia").toString());
                            j.setTalla(rs2.getObject("talla").toString());
                            j.setAlta(rs2.getObject("alta").toString());
                            j.setColegio(rs2.getObject("colegio").toString());
                            j.setEquipo_ant(rs2.getObject("equipo_ant").toString());
                            j.setRopa(rs2.getObject("ropa").toString());
                            
                            eqi.get(i).SetJugador(j);
                            
                        }
                    
                    }catch(SQLException e ){
                        
                                JOptionPane.showMessageDialog(null,"Error al obtener los jugadores de un equipo\n"
                                + e.getMessage());
                    }

                    i++;
                
                }
                

            }catch(SQLException e ){
                JOptionPane.showMessageDialog(null,"Error al obtener los equipos\n"
                                + e.getMessage());
            }
                        
            return eqi;
        
        }
        
        public Integer crearEquipo(String nombre){
                        
            boolean confirmacion = gestor.Insertar("INSERT INTO equipo(nombre,alta) "
                                                   + "VALUES ('" + nombre + "',1)");
            
            if(confirmacion==false){
                return null;
            }
            
            Integer cant=null;
            
             /* Consultamos el maximo id de los equipos que se encuentra en la fundacion */
            ResultSet rs2 =gestor.Consultar("SELECT max(id_equipo) AS max_id FROM equipo");

            try {

                rs2.next();
                cant=(Integer)rs2.getObject("max_id");

            } catch (SQLException e) {
                
                
                cant = -1;

                JOptionPane.showMessageDialog(null, "Fallo al intentar conseguir el id del nuevo equipo\n"+e.getMessage());
            }
            

             return cant;
        }
		
	public boolean BajaJugadorEquipo(Integer idj, Integer ide){
            
            boolean confirmacion;

            confirmacion = gestor.Modificar("UPDATE inscrito SET alta=0 WHERE id_jugador="+idj+" and id_equipo=" + ide);

            return confirmacion;
            
        }
        
                
        public boolean AsociarEntrenadorDB(Integer idEntrenador, Integer idEquipoFundacion){
            
            boolean confirmacion;
        
            
            confirmacion = gestor.Insertar("INSERT INTO entrena (id_entrenador,id_equipo) "
                                            + "VALUES ("+ idEntrenador + ", " 
                                            + idEquipoFundacion +")");
                        
            return confirmacion;       
            
        }
        
        public boolean DesvincularEntrenadorDB(Integer idEntrenador, Integer idEquipoFundacion){
            
            boolean confirmacion;
            
            confirmacion = gestor.Modificar("DELETE FROM entrena WHERE "
                                            + " id_entrenador = '"+ idEntrenador 
                                            + "' AND id_equipo = '" 
                                            + idEquipoFundacion+"'");
            return confirmacion;
            
        }
        public boolean ComprobarDatosAsociarEntrenadorDB ( Integer idEntrenador, Integer idEquipoFundacion){
                 boolean confirmacion = true;
                 int n_entrenadores=0;
                 int ie=0;
                 
                /* Aquí se consulta si el equipo tiene ya dos entrenadores o no */
                ResultSet rs2 =gestor.Consultar("SELECT id_entrenador FROM entrena where"
                                                +" id_equipo = '" 
                                            + idEquipoFundacion +"'");

            try{
              while(rs2.next()){
                  if(n_entrenadores == 0){
                      ie = (Integer)rs2.getObject("id_entrenador");
                  }
                  
                  n_entrenadores++;
              }
            }catch(SQLException e ){
                JOptionPane.showMessageDialog(null,"Error al obtener los entrenadores\n"
                                + e.getMessage());
            }
            if(n_entrenadores < 2 && ie != idEntrenador ){
                confirmacion = true;
            }
            else
                 confirmacion = false;
               
                 return confirmacion;
        }
        
        public ArrayList<Integer> ObtenerEntrenadorDB(Integer idEquipoFundacion){
            
            boolean confirmacion = true;
            int n_entrenadores=0;
            ArrayList<Integer> ent = new ArrayList<Integer>();

            
            ResultSet rs2 =gestor.Consultar("SELECT id_entrenador FROM entrena where"
                                                +" id_equipo = '" 
                                            + idEquipoFundacion +"'");
            try{
              while(rs2.next()){
                      ent.add((Integer)rs2.getObject("id_entrenador"));
              }
            }catch(SQLException e ){
                JOptionPane.showMessageDialog(null,"Error al obtener los entrenadores\n"
                                + e.getMessage());
            }
                        
            return ent;       
            
        }

}
